從小我就喜歡玩遊戲,第一次置身在一個遊戲中,感覺自己到了一個不同的世界。
在哪裡可以體驗不同的生活,就像電影一樣,當你看電影也試著帶入角色在劇情中的發展,所以也有一說遊戲是「第九藝術」,因為遊戲融合了傳統的八大藝術,並且「互動」是遊戲的核心特徵。玩家不只是被動觀賞,有些遊戲更可以讓玩家決定劇情的走向。
回到我們的主題,為什麼想要做遊戲?
身為一個軟體工程師,開發遊戲就像是想要追逐的聖杯,至少對於喜愛遊戲的人,應該都有產生想要自己開發一款遊戲的夢想,所以就有了想要挑戰這個主題的念頭。
在遊戲開發的世界裡,選擇適合的程式語言和引擎就像選擇武器一樣關鍵。
為什麼不選擇 Unity、Godot 或 Unreal 這些成熟的引擎,反而挑戰相對新穎的 Bevy?
可能對於一些人會選擇 Rust 的原因會是因為——效能、安全性、還有那份「從底層開始掌控一切」的成就感。
但對於我而言,其實就只是喜歡 Rust,想要用它來做點有趣的東西。然後目前用 Rust 來作為開發遊戲引擎的選擇,有一定的知名度跟生態系,首選就是 Bevy 了。
先來看一下 Bevy 的程式碼長怎樣:
use bevy::prelude::*;
#[derive(Component)]
struct Dot {
speed: f32,
}
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_systems(Startup, setup)
.add_systems(Update, (move_dot_with_mouse, update_cursor_position))
.insert_resource(CursorPosition::default())
.run();
}
這段程式碼表現了 Bevy 的一些核心概念:App 是整個程式的容器,透過 add_plugins
載入功能模組,add_systems
,並且視需求加入,就像使用 VSCode 可以選擇新增數個 extensions 一樣。
這個範例是一個圓點顯示在螢幕中,然後這個圓點會跟著你的滑鼠游標移動。當然程式碼不是只有這麼簡單,只是先給大家看 Bevy 寫起來的感覺怎麼樣,然後這個遊戲操作起來的畫面會像這樣:
大概了解 Bevy 的寫法之後,第一步很重要,也就是要設定好我們的開發環境。
需要安裝的東西如下,盡量從官方文件中得到最新的消息:
這兩個東西是必備的,Rust 安裝完之後,會自動安裝一個 Cargo 管理工具在電腦中,要新增專案或者是安裝套件都會經由 Cargo 來幫我們處理,可以想成是 npm 這樣的角色。
在 npm 的世界中,會有 package.json 這樣的檔案來紀錄管理我們開發過程中,安裝了哪些東西。Cargo 也有這樣的一個檔案,叫做 Cargo.toml。所以當安裝完 Bevy 在專案中,就可以檢查是不是有這筆紀錄,以我的專案安裝完會是像這樣:
[package]
name = "bevy_demo"
version = "0.1.0"
edition = "2024"
[dependencies]
bevy = "0.16.1"
Bevy 上面有很多的範例,非常建議去試玩看看。當初我也是看到範例之後,才決定要挑戰看看,畢竟可以參考別人的寫法XD
如果對我上面的滑鼠游標移動範例有興趣的話,也可以到我的 repo 下載試玩看看。
Rogue-lite 遊戲的核心在於「隨機性」和「重玩價值」,每次遊戲都會帶來不同的體驗。這也是我選擇做這個主題的原因,它們的魅力正是來自無限的變化性。而 Rust 的記憶體安全特性配上 Bevy 的現代化 ECS 架構,正是實現這種複雜隨機系統的完美組合。相較於傳統的 C++ 遊戲開發,我們不需要擔心記憶體洩漏或空指標錯誤,可以專注在創意和遊戲性上。
還有一個很重要的原因是,Rogue-lite 類型對比一些劇情向的遊戲來說,可以不需要有任何劇情,所以我們可以專注在遊戲開發上。
大概介紹了一下這個主題的想法來源,選擇了遊戲引擎之後,30 天後預計會是什麼樣的結果?
之所以選擇這個主題,是想用最小 MVP 完成一款 Rogue-lite 遊戲,圓了心中的遊戲夢。更重要的是,能大聲跟朋友說:「嘿,你要不要下載我做的遊戲?」